package es.udc.fbellas.j2ee.tiendaweb.model.productofacade.delegate;

import java.io.Serializable;
import java.util.List;

import es.udc.fbellas.j2ee.tiendaweb.model.carrito.Carrito;
import es.udc.fbellas.j2ee.tiendaweb.model.carrito.LineaCarrito;
import es.udc.fbellas.j2ee.tiendaweb.model.categoria.TO.CategoriaTO;
import es.udc.fbellas.j2ee.tiendaweb.model.detallespedido.TO.DetallesPedidoTO;
import es.udc.fbellas.j2ee.tiendaweb.model.direccionpostal.TO.DireccionPostalTO;
import es.udc.fbellas.j2ee.tiendaweb.model.productofacade.TO.PedidoChunkTO;
import es.udc.fbellas.j2ee.tiendaweb.model.productofacade.TO.ProductoChunkTO;
import es.udc.fbellas.j2ee.tiendaweb.model.propiedad.TO.PropiedadTO;
import es.udc.fbellas.j2ee.tiendaweb.model.tarjetabancaria.TO.TarjetaBancariaTO;
import es.udc.fbellas.j2ee.util.exceptions.DuplicateInstanceException;
import es.udc.fbellas.j2ee.util.exceptions.InstanceNotFoundException;
import es.udc.fbellas.j2ee.util.exceptions.InternalErrorException;


/**
 * A facade to model the interaction of the user with the portal. There exist
 * some logical restrictions with regard to the order of method calling. 
 * In particular, <code>findUserProfile</code>,  
 * <code>updateUserProfileDetails</code> and <code>changePassword</code> can 
 * not be called if <code>login</code> or <code>registerUser</code> have not 
 * been previously called. After the user calls one of these two methods, the 
 * user is said to be authenticated.
 */
public interface ProductoFacadeDelegate extends Serializable {
	
	public ProductoChunkTO buscarPorPalabras(String palabras,int inicio, int elemPorGrupo) throws InternalErrorException;
	public ProductoChunkTO buscarPorPalabrasYCategoria(String palabras,int Categoria,int inicio, int elemPorGrupo) throws InternalErrorException;
	public Carrito anhadirProducto (int idProducto, int numUdads)throws InternalErrorException;
	public Carrito eliminarProducto(int idProducto)throws InternalErrorException,InstanceNotFoundException;
	public Carrito modifUnidades(int idProducto,int numUdads)throws InternalErrorException,InstanceNotFoundException;
	public DetallesPedidoTO comprarProductos(DireccionPostalTO dir, TarjetaBancariaTO tarjeta)throws InternalErrorException,DuplicateInstanceException;
	public List<LineaCarrito> visualizarCarrito()throws InternalErrorException;
	public PedidoChunkTO visualizarPedido(int idPedido,int inicio,int elemPorGrupo)throws InternalErrorException;
	public List<PropiedadTO> propiedadesProducto(int idProducto) throws InternalErrorException;
	public List<CategoriaTO> obtenerCategorias() throws InternalErrorException;
	public Carrito anhadirLogin(String login); 

}
